﻿#ifndef NUMERINPUTDIALOG_H
#define NUMERINPUTDIALOG_H

#include <QDialog>
#include "mybutton.h"
#include "setcontrolstyle.h"
 
#define NUM_BAK_LAG		100			// 数据撤销次数

namespace Ui {
class NumerInputDialog;
}

class NumerInputDialog : public QDialog
{
    Q_OBJECT

public:
    explicit NumerInputDialog(QWidget *parent = 0);
    ~NumerInputDialog();

private:
    Ui::NumerInputDialog *ui;

private:
    int64_t m_value;
    int64_t m_min;
    int64_t m_max;
    int m_afterPoint;
    int64_t m_defVal;

private:
    int m_defFlag;
    int m_pointFlag;    // 小数点标志
    QString m_unitStr;
    QList<QPushButton*> m_leftNumberBtnList;
    QList<QPushButton*> m_rightNumberBtnList;

private:
    int64_t m_valuebak[NUM_BAK_LAG];	// 数值恢复备份
    int m_pointFlagbak[NUM_BAK_LAG]; 	// 小数点恢复备份   
    int m_bakIdx;						// 数组索引
	
private:
    QString getShowString(int64_t val, int pointflag);
    int checkValueRange(int64_t val, int pointflag);
    int64_t fixValue( int64_t val, int pointflag);
    int getPointMuti(int pointflag);
    void showValue();
    void showRange();
    void addNum(int num);
    void changeValue(int weights);

    void bakValue();			// 备份撤销数据
    void chkbakValue();			// 校验备份撤销数据
    void rebakValue();			// 恢复备份撤销数据

private:
    void initControl();//初始化窗体控件，包括位置、尺寸、样式
    void initResolution();
    void initControlStyle();//初始化窗体控件样式

public:
    void initDialog();//初始化窗体
    void setTitleStr(QString str);//设置标题
    void setUnitStr(QString str);
    void setValueAndRange(int64_t val, int64_t min, int64_t max, int afterpoint, int defen = 0, int64_t defvalue = 1);
    int64_t getValue();

private slots:
    void on_buttonClean_clicked();
    void on_buttonNum00_clicked();
    void on_buttonDelete_clicked();
    void on_buttonNum7_clicked();
    void on_buttonNum8_clicked();
    void on_buttonNum9_clicked();
    void on_buttonNum4_clicked();
    void on_buttonNum5_clicked();
    void on_buttonNum6_clicked();
    void on_buttonNum1_clicked();
    void on_buttonNum2_clicked();
    void on_buttonNum3_clicked();
    void on_buttonPlusMinus_clicked();
    void on_buttonNum0_clicked();
    void on_buttonPoint_clicked();
    void on_buttonDec1000_clicked();
    void on_buttonInc1000_clicked();
    void on_buttonDec100_clicked();
    void on_buttonInc100_clicked();
    void on_buttonDec10_clicked();
    void on_buttonInc10_clicked();
    void on_buttonDec1_clicked();
    void on_buttonInc1_clicked();
    void on_buttonDec01_clicked();
    void on_buttonInc01_clicked();
    void on_buttonOk_clicked();
    void on_buttonCancel_clicked();
};

#endif // NUMERINPUTDIALOG_H
